
# 导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import TitleOpts,LabelOpts
from pyecharts.globals import ThemeType



# 读取文件
with open("D:/python-learn/data/1960-2019全球GDP数据.csv", "r", encoding="ANSI") as f:
    data = f.readlines()

# 删除第一行数据
data.pop(0)

# 取出数据并添加进字典
data_dict = {}
for data_str in data:
    data_list = data_str.split(",")
    year = int(data_list[0])
    country = data_list[1]
    gdp = float(data_list[2])
    # 添加进字典
    if year in data_dict:
        data_dict[year].append([country,gdp])
    else:
        data_dict[year] = []    # 如果 year 不是字典的键，则先为该年份创建一个空列表，然后将 [country, gdp] 添加到列表中。
        data_dict[year].append([country,gdp])

# 对年份进行排序
def country_data(data_dict):
    sorted_year = sorted(data_dict.keys())     # 对字典的key，即年份进行排序
    x_result = []
    y_result = []
    # 对每个年份里gdp国家进行排序
    for year in sorted_year:
        data_dict[year] = sorted(data_dict[year], key=lambda element:element[1],reverse=True)

    # 取出排名前20的国家
        process_country_ff = data_dict[year][0:20]
        x_data = []
        y_data = []
        for every_country_data in process_country_ff:
            x_data.append(every_country_data[0])
            y_data.append(every_country_data[1]/100000000)
        x_result.append(x_data)
        y_result.append(y_data)
    return x_result,y_result,sorted_year
x_data,y_data,years = country_data(data_dict)
# 建立时间线对象
time_line = Timeline({"theme":ThemeType.DARK})

# 建立柱状图对象
for year,x,y in zip(years,x_data,y_data):   # 同时遍历, 利用zip将[年份]，[国家]，[gdp]一一对应结合成{(年份1,[国家],[gdp]),(年份2,[国家],[gdp])}
    x.reverse()
    y.reverse()
    bar = Bar()
    bar.add_xaxis(x)
    bar.add_yaxis("GDP(亿)", y, label_opts=LabelOpts(position="right"))
    bar.reversal_axis()
    bar.set_global_opts(
        title_opts=TitleOpts(is_show=True,
                             title="全球GDP前二十国家排名",
                             pos_bottom="88%",
                             pos_left="center"),

    )
# 添加时间线数据
    time_line.add(bar,str(year))
# 设置时间线对象
time_line.add_schema(
    is_timeline_show=True,
    is_loop_play=True,
    is_auto_play=True,
    play_interval=1000
)
# 生成
time_line.render("全球GDP数据动态柱状图-练习1.html")







